package construtora;

import java.util.List;

import obra.Obra;

import org.hibernate.Query;
import org.hibernate.Session;


public class ConstrutoraDAOHibernate implements ConstrutoraDAO{

	private Session	session;

	public void setSession(Session session) {
		this.session = session;
	}

	public void salvar(Construtora construtora) {
		this.session.save(construtora);
	}

	public void atualizar(Construtora construtora) {

		if (construtora.getPermissao() == null || construtora.getPermissao().size() == 0) {
			Construtora construtoraPermissao = this.carregar(construtora.getCodigo());
			construtora.setPermissao(construtoraPermissao.getPermissao());
			this.session.evict(construtoraPermissao);
		}

		this.session.update(construtora);
	}

	public void excluir(Construtora construtora) {
		this.session.delete(construtora);
	}

	public Construtora carregar(Integer codigo) {
		//TODO o hibernate nao conseguira fazer a carga caso seja passado o Construtora
		// no parametro, tem que ser diretamente a chave (integer)
		return (Construtora) this.session.get(Construtora.class, codigo);
	}

	public Construtora buscarPorLogin(String login) {
		String hql = "select c from Construtora c where c.login = :login";
		Query consulta = this.session.createQuery(hql); 
		consulta.setString("login", login);

		//TODO mostrar primeiramente com o list e depois apresentar o uniqueResult
		Construtora construtora = (Construtora) consulta.uniqueResult();
		return construtora;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Construtora> listar() {
		String hql = "select c from Construtora c";
		Query consulta = this.session.createQuery(hql); 

		//TODO mostrar primeiramente com o list e depois apresentar o uniqueResult
		List<Construtora> construtoras = consulta.list();
		return construtoras;
	}

	/*@SuppressWarnings("unchecked")
	public List<Construtora> listar() {
		return this.session.createCriteria(Construtora.class).list();
	}*/

}
